Page({
  // 页面初始数据定义
  data: {
    // 可选择的游戏模式数组
    gameModes: ['九球模式', '四球模式', '斯诺克模式', '黑八模式'],
    // 当前选中的游戏模式索引（默认第一个）
    currentMode: 0,
    // 玩家信息数组，包含姓名和分数（初始两个玩家）
    players: [
      { name: '玩家1', score: 0 },
      { name: '玩家2', score: 0 }
    ],
    // 当前活跃玩家索引（0或1）
    activePlayer: 0,
    
    // 九球模式得分类型配置
    nineBallTypes: [
      { type: 'normal', label: '普胜', points: '+4', color: '#3498db' },  // 普通胜利
      { type: 'smallGold', label: '小金', points: '+7', color: '#f1c40f' }, // 小黄金胜利
      { type: 'bigGold', label: '大金', points: '+10', color: '#e67e22' }, // 大黄金胜利
      { type: 'foul', label: '犯规', points: '-1', color: '#95a5a6' },    // 犯规扣分
      { type: 'blackGold', label: '黑金', points: '-7', color: '#2c3e50' }  // 黑金特殊扣分
    ],

    // 斯诺克模式球型配置
    snookerBalls: [
      { type: 'red', label: '红球', points: 1, class: 's-red' },    // 红球1分
      { type: 'yellow', label: '黄球', points: 2, class: 's-yellow' }, // 黄球2分
      { type: 'green', label: '绿球', points: 3, class: 's-green' },  // 绿球3分
      { type: 'brown', label: '棕球', points: 4, class: 's-brown' },  // 棕球4分
      { type: 'blue', label: '蓝球', points: 5, class: 's-blue' },   // 蓝球5分
      { type: 'pink', label: '粉球', points: 6, class: 's-pink' },   // 粉球6分
      { type: 'black', label: '黑球', points: 7, class: 's-black' },  // 黑球7分
      { type: 'foul', label: '犯规', points: -1, class: 's-gray' }    // 犯规扣分
    ]
  },

  // 切换游戏模式处理函数
  changeMode(e) {
    const mode = e.detail.value;  // 获取选择器的新值
    // 重置游戏状态
    this.setData({
      currentMode: mode,          // 更新当前模式
      activePlayer: 0,            // 重置活跃玩家为第一个
      players: [                  // 重置玩家分数
        { name: '玩家1', score: 0 },
        { name: '玩家2', score: 0 }
      ]
    });
  },

  // 九球/四球模式计分处理
  handleNineBall(e) {
    const { type } = e.currentTarget.dataset;  // 从按钮获取得分类型
    const current = this.data.activePlayer;    // 当前玩家索引
    const opponent = 1 - current;              // 对手玩家索引（0/1切换）
    const rules = this.data.nineBallTypes.find(t => t.type == type); // 查找对应规则
    
    // 深拷贝玩家数据避免引用问题
    const newPlayers = JSON.parse(JSON.stringify(this.data.players));
    const scoreChange = parseInt(rules.points);  // 转换为数字（处理+/-符号）
    
    newPlayers[current].score += scoreChange;    // 当前玩家加分/扣分
    // 前两种模式（九球/四球）的特殊计分规则
    if (this.data.currentMode < 2) {
      newPlayers[opponent].score = -newPlayers[current].score; // 对手显示相反分数
    }

    // 更新数据和活跃玩家（得分正数保持当前，负数切换）
    this.setData({
      players: newPlayers,
      activePlayer: scoreChange > 0 ? current : opponent
    });
  },

  // 斯诺克模式计分处理
  handleSnooker(e) {
    const { type } = e.currentTarget.dataset;  // 获取击打的球型
    const current = this.data.activePlayer;    // 当前玩家索引
    const ball = this.data.snookerBalls.find(b => b.type == type); // 查找球型配置
    
    // 深拷贝玩家数据
    const newPlayers = JSON.parse(JSON.stringify(this.data.players));
    newPlayers[current].score += ball.points;  // 更新当前玩家分数

    // 更新数据和活跃玩家（得分正保持，犯规或负数切换）
    this.setData({
      players: newPlayers,
      activePlayer: ball.points > 0 ? current : 1 - current
    });
  },

  // 手动切换斯诺克玩家
  switchSnookerPlayer() {
    this.setData({
      activePlayer: 1 - this.data.activePlayer  // 0/1切换算法
    });
  },

  // 黑八模式获胜处理
  handleBlackEight(e) {
    const winner = parseInt(e.currentTarget.dataset.player); // 获取点击的玩家索引
    const newPlayers = JSON.parse(JSON.stringify(this.data.players));
    newPlayers[winner].score += 1;  // 获胜方加1分

    this.setData({
      players: newPlayers,
      activePlayer: winner  // 设置获胜方为活跃玩家
    });
  },

  // 重置并推送数据
  resetAll() {
    // 构建当前对局记录[6,8](@ref)
    const record = {
      mode: this.data.gameModes[this.data.currentMode], // 玩法名称
      scores: JSON.parse(JSON.stringify(this.data.players)), // 玩家分数
      timestamp: new Date().toLocaleString() // 时间戳
    };

    // 读取历史记录并追加新数据[6](@ref)
    const history = wx.getStorageSync('matchHistory') || [];
    history.unshift(record); // 最新记录置顶
    wx.setStorageSync('matchHistory', history);

    // 重置游戏状态[1](@ref)
    this.setData({
      players: [
        { name: '玩家1', score: 0 },
        { name: '玩家2', score: 0 }
      ],
      activePlayer: 0
    });
  }
});